package com.hs.util;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

public class UploadUtil {

    //创建并返回map类型
    public static Map<String,String> upload(HttpServletRequest req){
        //map集合构建 用来保存上传后的字段信息
        Map<String,String > map=new HashMap<>();
        //通过文件工厂去创建一个上传组件
        DiskFileItemFactory factory=new DiskFileItemFactory();
        ServletFileUpload sfu=new ServletFileUpload(factory);

        try {
            //使用上传组件来解析请求对象
            List<FileItem> fileItems = sfu.parseRequest(req);
            // 遍历集合
            for (FileItem fileItem : fileItems) {
                //判断当前对象是否是普通字段，如果是，则获取数据即可
                if (fileItem.isFormField()){
                    String name = fileItem.getFieldName();//获取name的值
                    String value=fileItem.getString("UTF-8");// 获取普通字段的value数据
                    map.put(name,value);
                }else {
                    //获取的上传的对象
                    String name=fileItem.getFieldName();
                    String fname=fileItem.getName(); //获取文件名称（获取的是文件的全路径）
                   // 解决没有选择上传文件的问题
                    if(name !=null && !"".equals(fname)){
                        //判断是否是全路径，并单独处理出来的文件名
                        if (fname.contains("\\")){
                            fname=fname.substring(fname.lastIndexOf("\\")+1);
                        }
                        //保证上传的图片不唯一 或者想要上传两个一摸一样的图片 就需要给定一个uuid
                        fname = UUID.randomUUID().toString().replace("-", "") + "-" + fname;
                        //上传后的文件对象
                        File tofile=new File("d:/file",fname);
                        //上传
                        fileItem.write(tofile);
                    }
                    map.put(name,fname);
                    System.out.println("上传成功！");
                }
            }


        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }



}
